package com.sheng.leetcode.year2023.month05.day09;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/05/09
 * <p>
 * 2437. 有效时间的数目<p>
 * <p>
 * 给你一个长度为 5 的字符串 time ，表示一个电子时钟当前的时间，格式为 "hh:mm" 。<p>
 * 最早 可能的时间是 "00:00" ，最晚 可能的时间是 "23:59" 。<p>
 * 在字符串 time 中，被字符 ? 替换掉的数位是 未知的 ，被替换的数字可能是 0 到 9 中的任何一个。<p>
 * 请你返回一个整数 answer ，将每一个 ? 都用 0 到 9 中一个数字替换后，可以得到的有效时间的数目。<p>
 * <p>
 * 示例 1：<p>
 * 输入：time = "?5:00"<p>
 * 输出：2<p>
 * 解释：我们可以将 ? 替换成 0 或 1 ，得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ，因为时间 "25:00" 是无效时间。所以我们有两个选择。<p>
 * <p>
 * 示例 2：<p>
 * 输入：time = "0?:0?"<p>
 * 输出：100<p>
 * 解释：两个 ? 都可以被 0 到 9 之间的任意数字替换，所以我们总共有 100 种选择。<p>
 * <p>
 * 示例 3：<p>
 * 输入：time = "??:??"<p>
 * 输出：1440<p>
 * 解释：小时总共有 24 种选择，分钟总共有 60 种选择。所以总共有 24 * 60 = 1440 种选择。<p>
 * <p>
 * 提示：<p>
 * time 是一个长度为 5 的有效字符串，格式为 "hh:mm" 。<p>
 * "00" <= hh <= "23"<p>
 * "00" <= mm <= "59"<p>
 * 字符串中有的数位是 '?' ，需要用 0 到 9 之间的数字替换。<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/number-of-valid-clock-times">2437. 有效时间的数目</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2437 {

    @Test
    public void test01() {
//        String time = "?5:00";
//        String time = "0?:0?";
//        String time = "??:??";
//        String time = "2?:??";
        String time = "?9:?0";
        System.out.println(new Solution().countTime(time));
    }
}

class Solution {
    public int countTime(String time) {
        String[] split = time.split(":");
        int left = 1, right = 1;
        if (split[0].charAt(0) == '?') {
            if (split[0].charAt(1) == '?') {
                left = 24;
            } else if (split[0].charAt(1) <= '4') {
                if (!split[1].equals("00") && split[0].charAt(1) == '4') {
                    left = 2;
                } else {
                    left = 3;
                }
            } else {
                left = 2;
            }
        } else if (split[0].charAt(1) == '?') {
            if (split[0].charAt(0) <= '1') {
                left = 10;
            } else {
                if (split[1].equals("00")) {
                    left = 5;
                } else {
                    left = 4;
                }
            }
        }

        if (split[1].charAt(0) == '?') {
            if (split[1].charAt(1) == '?') {
                right = 60;
            } else {
                right = 6;
            }
        } else if (split[1].charAt(1) == '?') {
            if (split[1].charAt(0) != '6') {
                right = 10;
            }
        }
        return left * right;
    }
}
